// JavaScript4种不同范围随机数
// min <= r <= max 即：[1,3]
const randomBoth = (min, max) => {
  const range = max - min
  const rand = Math.random()
  return min + Math.round(rand * range)
}

// min <=r < max 即：[1,3)
const randomLeft = (min, max) => {
  const range = max - min
  const rand = Math.random()
  return min + Math.floor(rand * range)
}

// min < r <= max 即：(1,3]
const randomRight = (min, max) => {
  const rang = max - min
  const rand = Math.random()
  if (Math.round(rand * rang) === 0) {
    return min + 1
  }
  return min + Math.round(rand * rang)
}
// min < r < max 即：(1,3)
const randomNone = (min, max) => {
  const rang = max - min
  const rand = Math.random()
  if (Math.round(rand * rang) === 0) {
    return min + 1
  } else if (Math.round(rand * max) === max) {
    return max - 1
  }
  return min + Math.round(rand * rang) - 1
}

/**
 * 随机数
 * @description 4种不同范围随机数 `type: both|left|right|none` 默认 both
 * @param {number} min 最小值（默认： 0）
 * @param {number} max 最大值 （默认： 1）
 * @param {'both' | 'left' | 'right' | 'none'} type 默认 both
 * @returns {number} 返回指定范围的数值
 */
export function random(min = 0, max = 1, type = 'both') {
  if (type === 'both') {
    return randomBoth(min, max)
  } else if (type === 'left') {
    return randomLeft(min, max)
  } else if (type === 'right') {
    return randomRight(min, max)
  } else if (type === 'none') {
    return randomNone(min, max)
  }
  return 0
}
